package com.ywl.stream;

import com.ywl.entity.Author;
import com.ywl.utils.AuthorFactory;

import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;

/**
 * 终末操作，查找与去重
 *
 * @author 24040
 * @name StreamDemo07
 * @date 2022-08-22 14:21
 */
public class StreamDemo07 {
    public static void main(String[] args) {
        List<Author> authors = AuthorFactory.getAuthors();
        test01(authors);
        test02(authors);
        test03(authors);
//        test04(authors);
        test05(authors);
    }

    /**
     * 获取流中的第一个元素。
     * @param authors
     */
    private static void test05(List<Author> authors) {
        Optional<Author> first = authors.stream()
                //先排序
                .sorted((x, y) -> x.getAge() - y.getAge())
                .findFirst();
        System.out.println(first.get());
    }


    /**
     * 获取一个年龄最小的作家，并输出他的姓名。
     */


    /**
     * 获取任意一个年龄大于18的作家，如果存在就输出他的名字
     */
    private static void test04(List<Author> authors) {
        Optional<Author> optionalAuthor = authors.stream()
                .filter(author -> author.getAge() > 18)
                .findAny();
        optionalAuthor.ifPresent(author -> System.out.println(author != null ? author : "nothing"));

    }


    /**
     * 判断作家是否都没有超过100岁的。
     * @param authors
     */
    private static void test03(List<Author> authors) {
        boolean b = authors.stream()
                .noneMatch(author -> author.getAge() >= 100);
        System.out.println(b);
    }

    /**
     * allMatch，查找是否所有元素都满足条件，都满足才返回true，否则返回false
     * 判断是否所有的作家都是成年人
     */
    private static void test02(List<Author> authors) {
        boolean b = authors.stream()
                .distinct()
                .allMatch(author -> author.getAge() > 18);
        System.out.println(b);
    }


    /**
     * anyMatch，查找是否有任意元素满足条件，满足返回true，否则返回false
     *
     * @param authors
     */
    private static void test01(List<Author> authors) {
        boolean b = authors.stream()
                .distinct()
                .anyMatch(author -> author.getAge() > 29);
        System.out.println(b);
    }


}
